﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using Crosland.Automotriz.Logic.Linq;
using Crosland.Automotriz.Entidad;
using Crosland.Automotriz.Seguridad.Entity;
using Crosland.Automotriz.Seguridad.Business;
using System.Net.Mail;
using Microsoft.Reporting.WebForms;
using System.Security.Principal;
using System.Net;

namespace Crosland.Automotriz.Web.Vehiculos
{
    public partial class wFrmVentaExternaRespuesta : System.Web.UI.Page
    {
        string idNegocio = ConfigurationManager.AppSettings["Negocio"];
        const string script = "MostrarAlerta();";

        protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack == false) 
            {
                ListaAnio();
                cboAño.Value = DateTime.Now.Year.ToString();
                cboMes.Value = DateTime.Now.Month.ToString();
                ListarEstados();
                ListarVendedor();
                cboEstado.Value = "41";
                ListarVentas();
            }
        }

        void ListaAnio()
        {
            clsTH_VentaBL da = new clsTH_VentaBL();
            cboAño.DataSource = da.AniosFactura();
            cboAño.TextField = "anio";
            cboAño.ValueField = "anio";
            cboAño.DataBind();
            cboAño.SelectedIndex = 0;
        }

        void ListarEstados()
        {
            clsT_Mae_Tabla_General_DetBL bl = new clsT_Mae_Tabla_General_DetBL();
            cboEstado.DataSource = bl.Listar("T_EST_SEG_VEH", 11);
            cboEstado.TextField = "DES_LARGA";
            cboEstado.ValueField = "ID_GENERAL_DET";
            cboEstado.DataBind();
            cboEstado.Value = "41";
        }

        void ListarVentas()
        {
            int anio = int.Parse(cboAño.Value.ToString());
            int mes = int.Parse(cboMes.Value.ToString());
            int ID_GENERAL_DET = int.Parse(cboEstado.Value.ToString());
            int ID_VENDEDOR = int.Parse(cboSupervisor.Value.ToString());

            clsTH_VentaExternaBL neg = new clsTH_VentaExternaBL();
            gv.DataSource = neg.ListarVentaxEstado(anio, mes, ID_GENERAL_DET, ID_VENDEDOR);
            gv.DataBind();
        }

        void ListarVendedor()
        {
            clsTD_VendedorBL oVen = new clsTD_VendedorBL();
            cboSupervisor.DataSource = oVen.ListarVendedor_Cliente_Vendedor(3, 2);
            cboSupervisor.TextField = "NOMBRE_APELLIDO";
            cboSupervisor.ValueField = "ID_VENDEDOR";
            cboSupervisor.DataBind();
            cboSupervisor.SelectedIndex = 0;
        }

        protected void btnSalir_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/Repuestos/wFrmDefault.aspx?id=" + idNegocio);
        }

        protected void btnGrabarSolicitudAprobado_Click(object sender, EventArgs e)
        {
            try
            {

                //Validar si los registros seleccionados existe algún estado distinto a Pendiente de Aprobar
                bool PendienteAprobar = true;
                clsTH_VentaExternaBL oVOC = new clsTH_VentaExternaBL();
                TH_Venta_Externa_Result eVOC = new TH_Venta_Externa_Result();

                List<object> fieldValues = gv.GetSelectedFieldValues(new string[] { "ID_VENTA_EXTERNA" });

                foreach (object item in fieldValues)
                {
                    int ID_VENTA_EXTERNA = int.Parse(item.ToString());

                    eVOC = oVOC.Seleccionar(ID_VENTA_EXTERNA);
                    string Estado = eVOC.DES_LARGA_ESTADO;

                    if (Estado == "EN PROCESO" || Estado == "APROBADO")
                    {
                        PendienteAprobar = false;
                    }
                }
                if (PendienteAprobar == false)
                {
                    lblMensaje.Text = "Solo puede seleccionar las ventas con el estado PENDIENTE DE APROBAR o RECHAZADO";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
                    return;
                }

                foreach (object item in fieldValues)
                {
                    int ID_VENTA_EXTERNA = int.Parse(item.ToString());
                    oVOC.ActualizarAprobado(ID_VENTA_EXTERNA, Session["User"].ToString());
                }

                ListarVentas();

                lblMensaje.Text = "Las ventas seleccionadas fueron aprobadas.";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);

            }
            catch (Exception ex)
            {
                lblMensaje.Text = ex.Message;
                ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
            }
        }

        protected void btnGrabarSolicitudRechazado_Click(object sender, EventArgs e)
        {
            try
            {
                bool PendienteAprobar = true;
                clsTH_VentaExternaBL oVOC = new clsTH_VentaExternaBL();
                TH_Venta_Externa_Result eVOC = new TH_Venta_Externa_Result();

                List<object> fieldValues = gv.GetSelectedFieldValues(new string[] { "ID_VENTA_EXTERNA" });

                foreach (object item in fieldValues)
                {
                    int ID_VENTA_EXTERNA = int.Parse(item.ToString());

                    eVOC = oVOC.Seleccionar(ID_VENTA_EXTERNA);
                    string Estado = eVOC.DES_LARGA_ESTADO;

                    if (Estado == "EN PROCESO" || Estado == "APROBADO" || Estado == "RECHAZADO")
                    {
                        PendienteAprobar = false;
                    }
                }

                if (PendienteAprobar == false)
                {
                    lblMensaje.Text = "Solo puede seleccionar las ventas con el estado PENDIENTE DE APROBAR";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
                    return;
                }

                foreach (object item in fieldValues)
                {
                    int ID_VENTA_EXTERNA = int.Parse(item.ToString());
                    oVOC.ActualizarRechazado(ID_VENTA_EXTERNA, Session["User"].ToString());
                }

                ListarVentas();

                lblMensaje.Text = "Las ventas seleccionadas fueron rechazadas.";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);

            }
            catch (Exception ex)
            {
                lblMensaje.Text = ex.Message;
                ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
            }
        }

        protected void btnConsultar_Click(object sender, EventArgs e)
        {
            ListarVentas();
        }

        protected void btnVerDetalle_Click(object sender, EventArgs e)
        {
            try
            {
                int indice = gv.FocusedRowIndex;
                if (indice >= 0)
                {
                    string VIN = gv.GetRowValues(indice, "NRO_VIN").ToString();
                    clsTH_VentaExternaBL bl = new clsTH_VentaExternaBL();
                    TD_VEHICULO veh = new TD_VEHICULO();
                    veh = bl.ListarVehiculoxVIN(3,VIN);
                    if (veh != null)
                    {
                        if (string.IsNullOrEmpty(veh.DES_MARCA)) { lblMarca.Text = ""; } else { lblMarca.Text = veh.DES_MARCA; }
                        if (string.IsNullOrEmpty(veh.DES_MODELO)) { lblModelo.Text = ""; } else { lblModelo.Text = veh.DES_MODELO; }
                        if (string.IsNullOrEmpty(veh.NRO_MOTOR)) { lblNroMotor.Text = ""; } else { lblNroMotor.Text = veh.NRO_MOTOR; }
                        if (string.IsNullOrEmpty(veh.ANIO_FAB_VEHICULO)) { lblAnioFabricacion.Text = ""; } else { lblAnioFabricacion.Text = veh.ANIO_FAB_VEHICULO; }
                        if (string.IsNullOrEmpty(veh.DES_COLOR)) { lblColor.Text = ""; } else { lblColor.Text = veh.DES_COLOR; }
                        if (string.IsNullOrEmpty(veh.ASIENTOS.ToString())) { lblAsientos.Text = ""; } else { lblAsientos.Text = veh.ASIENTOS.ToString(); }
                        if (string.IsNullOrEmpty(veh.RUEDAS)) { lblNroRuedas.Text = ""; } else { lblNroRuedas.Text = veh.RUEDAS; }
                        if (string.IsNullOrEmpty(veh.LONGITUD.ToString())) { lblLongitud.Text = ""; } else { lblLongitud.Text = veh.LONGITUD.ToString(); }
                        if (string.IsNullOrEmpty(veh.ANCHO.ToString())) { lblAncho.Text = ""; } else { lblAncho.Text = veh.ANCHO.ToString(); }
                        if (string.IsNullOrEmpty(veh.ALTURA.ToString())) { lblAltura.Text = ""; } else { lblAltura.Text = veh.ALTURA.ToString(); }
                        if (string.IsNullOrEmpty(veh.COMBUSTIBLE)) { lblCombustible.Text = ""; } else { lblCombustible.Text = veh.COMBUSTIBLE; }
                        if (string.IsNullOrEmpty(veh.PESO_BRUTO.ToString())) { lblPesoBruto.Text = ""; } else { lblPesoBruto.Text = veh.PESO_BRUTO.ToString(); }
                        if (string.IsNullOrEmpty(veh.PESO_NETO.ToString())) { lblPesoNeto.Text = ""; } else { lblPesoNeto.Text = veh.PESO_NETO.ToString(); }
                        if (string.IsNullOrEmpty(veh.NRO_CILINDRO)) { lblNroCilindros.Text = ""; } else { lblNroCilindros.Text = veh.NRO_CILINDRO; }
                        pcNuevo.ShowOnPageLoad = true;
                        int ID_VENTA_EXTERNA = int.Parse(gv.GetRowValues(indice, "ID_VENTA_EXTERNA").ToString());
                        clsTH_VentaExterna_ArchivoBL negocioArchivo = new clsTH_VentaExterna_ArchivoBL();
                        dvFotos.DataSource = negocioArchivo.ListarArchivos(ID_VENTA_EXTERNA);
                        dvFotos.DataBind();
                    }
                }
                else
                {
                    lblMensaje.Text = "Debe seleccionar una venta.";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
                }
            }
            catch (Exception ex)
            {
                lblMensaje.Text = ex.Message;
                ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
            }
        }

        protected void btnImprimir_Click(object sender, EventArgs e)
        {
            int anio = int.Parse(cboAño.Value.ToString());
            int mes = int.Parse(cboMes.Value.ToString());
            int ID_GENERAL_DET = int.Parse(cboEstado.Value.ToString());
            int ID_VENDEDOR = int.Parse(cboSupervisor.Value.ToString());

            this.rvPopupReporte.ProcessingMode = ProcessingMode.Remote;
            this.rvPopupReporte.ShowCredentialPrompts = true;
            this.rvPopupReporte.ShowExportControls = true;
            this.rvPopupReporte.ServerReport.ReportServerCredentials = new RSCredentials();
            this.rvPopupReporte.ServerReport.ReportServerUrl =
                new Uri(ConfigurationManager.AppSettings[DatosConfiguracion.RsServer]);
            this.rvPopupReporte.ServerReport.ReportPath = "/SAP_Vehiculos/rsVentaMensualMayorista";

            ReportParameter parameter = new ReportParameter("ANIO", anio.ToString());
            ReportParameter parameter2 = new ReportParameter("MES", mes.ToString());
            ReportParameter parameter3 = new ReportParameter("ID_GENERAL_DET", ID_GENERAL_DET.ToString());
            ReportParameter parameter4 = new ReportParameter("ID_VENDEDOR", ID_VENDEDOR.ToString());

            this.rvPopupReporte.ServerReport.SetParameters(parameter);
            this.rvPopupReporte.ServerReport.SetParameters(parameter2);
            this.rvPopupReporte.ServerReport.SetParameters(parameter3);
            this.rvPopupReporte.ServerReport.SetParameters(parameter4);

            string script = "popupReporte();";
            ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", script, true);
        }

        [Serializable]
        public sealed class RSCredentials : IReportServerCredentials
        {
            public WindowsIdentity ImpersonationUser
            {
                get { return null; }
            }

            public ICredentials NetworkCredentials
            {
                get
                {
                    string userName = ConfigurationManager.AppSettings[DatosConfiguracion.RsUser];
                    string password = ConfigurationManager.AppSettings[DatosConfiguracion.RsPassword];
                    string domain = ConfigurationManager.AppSettings[DatosConfiguracion.RsDomain];

                    return new NetworkCredential(userName, password, domain);
                }
            }

            public bool GetFormsCredentials(out Cookie authCookie, out String userName, out String password,
                out String authority)
            {
                authCookie = null;
                userName = null;
                password = null;
                authority = null;
                return false;
            }
        }

    }
}